package org.example.provider.day02;

import org.apache.dubbo.config.annotation.DubboService;
import org.example.api.RpcResult;
import org.example.api.day02.IQuery;

import java.util.concurrent.TimeUnit;

@DubboService(version = "1.0.0",validation = "true",timeout = 2000)
public class QueryProvider implements IQuery {

    @Override
    public RpcResult<String> query(String args) {
        // 模拟DB线程池资源 耗尽 然后阻塞请求； 以下阻塞代码的逻辑并不严谨 仅仅是为了说明下当时的问题
        // 量大的情况下 没有该阻塞 同样会出现 thread pool is exhausted的bug (注释掉也可以复现问题)
        try {
            TimeUnit.MILLISECONDS.sleep(1500);
        } catch (Exception e) {
            return RpcResult.error(e.getMessage());
        }
        System.out.println("query arguments : " + args);
        return RpcResult.success("return DB data " + args);
    }
}
